Стек: Java 17 Spring Boot 3 База данных PostgreSQL Maven REST API Swagger 
# Запуск API на Java с PostgreSQL

Этот проект представляет собой пример простого RESTful API на Java с использованием PostgreSQL в качестве базы данных.

## Требования

- Java Development Kit (JDK)
- Apache Maven
- PostgreSQL

## Установка и настройка

1. **Клонирование репозитория:**

```
git clone https://github.com/oleg-olegi/BankOperationService 
```

2. **Создание базы данных:**

Создайте базу данных PostgreSQL и настройте соединение в файле application.properties.

Сборка проекта:

Перейдите в корневую директорию проекта и выполните: 

```
mvn clean install
```

## Запуск

3. **Запуск приложения:**

После успешной сборки приложения выполните:

```
java -jar target/BankOperationService.jar
 ```
## Тестирование API

4. **Тестирование**
После запуска приложения API будет доступно по адресу `http://localhost:8080`
Тестирование возможно через Swagger, либо
 используйте любой HTTP-клиент (например, cURL, Postman) для тестирования эндпоинтов.

## Документация API
5. **API предоставляет следующие эндпоинты:**

Регистрация пользователя

Метод: POST
Путь: /api/users/register
Тело запроса: объект типа UserData, содержащий информацию о новом пользователе
Описание: Регистрирует нового пользователя на основе предоставленных данных.

Перевод средств между пользователями

Метод: PUT
Путь: /api/transfer/from/{idFrom}/to/{idTo}/amount/{sum}
Параметры пути:
{idFrom} - идентификатор пользователя, со счета которого производится перевод
{idTo} - идентификатор пользователя, на счет которого производится перевод
{sum} - сумма перевода
Описание: Осуществляет перевод заданной суммы от одного пользователя к другому.

Добавление телефонного номера для пользователя

Метод: POST
Путь: /api/users/contacts/addPhone/{id}
Параметры пути:
{id} - идентификатор пользователя
Тело запроса: строка с новым телефонным номером
Описание: Добавляет новый телефонный номер для пользователя с указанным идентификатором.

Добавление адреса электронной почты для пользователя

Метод: POST
Путь: /api/users/contacts/addEmail/{id}
Параметры пути:
{id} - идентификатор пользователя
Тело запроса: строка с новым адресом электронной почты
Описание: Добавляет новый адрес электронной почты для пользователя с указанным идентификатором.

Обновление телефонного номера пользователя

Метод: PUT
Путь: /api/users/contacts/update-phone/{id}
Параметры пути:
{id} - идентификатор пользователя
Тело запроса: строка с новым телефонным номером
Описание: Обновляет существующий телефонный номер пользователя с указанным идентификатором.

Обновление адреса электронной почты пользователя

Метод: PUT
Путь: /api/users/contacts/update-email/{id}
Параметры пути:
{id} - идентификатор пользователя
Тело запроса: строка с новым адресом электронной почты
Описание: Обновляет существующий адрес электронной почты пользователя с указанным идентификатором.

Удаление телефонного номера пользователя

Метод: DELETE
Путь: /api/users/contacts/delete-phone/{id}
Параметры пути:
{id} - идентификатор пользователя
Тело запроса: строка с телефонным номером для удаления
Описание: Удаляет указанный телефонный номер пользователя с указанным идентификатором.

Удаление адреса электронной почты пользователя

Метод: DELETE
Путь: /api/users/contacts/delete-email/{id}
Параметры пути:
{id} - идентификатор пользователя
Тело запроса: строка с адресом электронной почты для удаления
Описание: Удаляет указанный адрес электронной почты пользователя с указанным идентификатором.

Получение списка пользователей с пагинацией

Метод: GET
Путь: /api/users/filter
Параметры запроса:
page - номер страницы (начиная с 0)
size - количество элементов на странице
Описание: Возвращает список пользователей с учетом заданной пагинации.

Поиск пользователей по дате

Метод: GET
Путь: /api/users/filter/by-date
Параметры запроса:
date - дата в формате ISO (например, YYYY-MM-DD)
Описание: Возвращает список пользователей, зарегистрированных на указанную дату.

Поиск пользователей по номеру телефона

Метод: GET
Путь: /api/users/filter/by-phone
Параметры запроса:
phone - номер телефона пользователя
Описание: Возвращает контактную информацию пользователя по его номеру телефона.

Поиск пользователей по имени

Метод: GET
Путь: /api/users/filter/by-name
Параметры запроса:
name - имя пользователя или его часть
Описание: Возвращает список пользователей, чье имя совпадает с указанным.

Поиск пользователей по адресу электронной почты

Метод: GET
Путь: /api/users/filter/by-email
Параметры запроса:
email - адрес электронной почты пользователя
Описание: Возвращает контактную информацию пользователя по его адресу электронной почты.




POST /api/resource - Создать новый ресурс
PUT /api/resource/{id} - Обновить ресурс по идентификатору
DELETE /api/resource/{id} - Удалить ресурс по идентификатору